package com.wicket.okrapp.integration.dto;

import com.wicket.okrapp.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

import lombok.Data;

/**
 * @desc TaskDataDto
 * @使用场景
 */
@Data
public class TaskDataDto extends BaseDto implements Serializable {

  /**
   * 任务ID
   */
  @ApiModelProperty("任务ID")
  private String taskId;

  /**
   * 冗余最新进度
   */
  @ApiModelProperty("冗余最新进度")
  private Double percentageProgress;

  /**
   * 任务名称
   */
  @ApiModelProperty("任务名称")
  private String taskName;

  /**
   * 总时长
   */
  @ApiModelProperty("总时长")
  private Long totalLength;

  /**
   * 前端状态时间
   */
  @ApiModelProperty("前端状态时间")
  private Long deflectionTime;

  /**
   * 创建时间
   */
  @ApiModelProperty("创建时间")
  private Date createTime;

  /**
   * 内容表主键ID
   */
  @ApiModelProperty("内容表主键ID")
  private String entityId;

  /**
   * 父内容表主键ID
   */
  @ApiModelProperty("父内容表主键ID")
  private String parentEntityId;

  /**
   * 归属对象ID
   */
  @ApiModelProperty("归属对象ID")
  private String coordObjectId;

  /**
   * 内容冗余状态 EDITING:草稿 TOBESIGN:待签收 ONGOING:进行中 FAILED:已失败 OVERDUE:逾期任务 NOT_AT_THE:未开始 UNCOMPLETED:未完成 COMPLETED:已完成 UNREPORTED:待汇报 EVA:评价中 AUDIT:审核中 EXPIRED:已逾期 SUCCESS:已成功 ENDED:已结束 UNLIMITED:不限 TOBEFILL:待填报 TOBEEVA:待评价
   */
  @ApiModelProperty("内容冗余状态")
  private String stateCode;

  /**
   * 周期名称
   */
  @ApiModelProperty("周期名称")
  private String cycleStandardName;

  /**
   * 归属内容ID
   */
  @ApiModelProperty("归属内容ID")
  private String belongToContentId;

  /**
   * 虚拟组织下部门ID
   */
  @ApiModelProperty("虚拟组织下部门ID")
  private String deptId;

  /**
   * 负责人就职记录ID
   */
  @ApiModelProperty("负责人就职记录ID")
  private String personLiableInductionRecordId;

  /**
   * 主管就职记录ID
   */
  @ApiModelProperty("主管就职记录ID")
  private String directorInductionRecordId;

  /**
   * 部门简称
   */
  @ApiModelProperty("部门简称")
  private String deptShortName;

  /**
   * 负责人头像
   */
  @ApiModelProperty("负责人头像")
  private String personLiableUserFace;

  /**
   * 负责人姓名
   */
  @ApiModelProperty("负责人姓名")
  private String personLiableIdCardName;

  /**
   * 负责人昵称
   */
  @ApiModelProperty("负责人昵称")
  private String personLiableNickName;

  /**
   * 主管头像
   */
  @ApiModelProperty("主管头像")
  private String directorUserFace;

  /**
   * 主管姓名
   */
  @ApiModelProperty("主管姓名")
  private String directorIdCardName;

  /**
   * 主管昵称
   */
  @ApiModelProperty("主管昵称")
  private String directorNickName;

  /**
   * 任务编号
   */
  @ApiModelProperty("任务编号")
  private String taskNumber;

  /**
   * 任务类型 ROUTINE_TASK:常规任务 PROJECT_TASK:项目任务 TEMPORARY_TASK:临时任务 PROBLEM_TASK:问题任务
   */
  @ApiModelProperty("任务类型")
  private String taskType;

  /**
   * 创建人就职记录ID
   */
  @ApiModelProperty("创建人就职记录ID")
  private String createInductionId;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    TaskDataDto that = (TaskDataDto) o;
    return (
      taskId == that.taskId &&
      percentageProgress == that.percentageProgress &&
      taskName == that.taskName &&
      totalLength == that.totalLength &&
      deflectionTime == that.deflectionTime &&
      createTime == that.createTime &&
      entityId == that.entityId &&
      parentEntityId == that.parentEntityId &&
      coordObjectId == that.coordObjectId &&
      stateCode == that.stateCode &&
      cycleStandardName == that.cycleStandardName &&
      belongToContentId == that.belongToContentId &&
      deptId == that.deptId &&
      personLiableInductionRecordId == that.personLiableInductionRecordId &&
      directorInductionRecordId == that.directorInductionRecordId &&
      deptShortName == that.deptShortName &&
      personLiableUserFace == that.personLiableUserFace &&
      personLiableIdCardName == that.personLiableIdCardName &&
      personLiableNickName == that.personLiableNickName &&
      directorUserFace == that.directorUserFace &&
      directorIdCardName == that.directorIdCardName &&
      directorNickName == that.directorNickName &&
      taskNumber == that.taskNumber &&
      taskType == that.taskType &&
      createInductionId == that.createInductionId
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      taskId,
      percentageProgress,
      taskName,
      totalLength,
      deflectionTime,
      createTime,
      entityId,
      parentEntityId,
      coordObjectId,
      stateCode,
      cycleStandardName,
      belongToContentId,
      deptId,
      personLiableInductionRecordId,
      directorInductionRecordId,
      deptShortName,
      personLiableUserFace,
      personLiableIdCardName,
      personLiableNickName,
      directorUserFace,
      directorIdCardName,
      directorNickName,
      taskNumber,
      taskType,
      createInductionId
    );
  }

}
